<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>SCRUMantis - Criação de procedures</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body style="font-family: fantasy;">
<?php
  // Pegar número do caso pai
  $hostName = NULL;
  $usuario = NULL;
  $senha = NULL;
  $database = NULL;
    
  if (!isset($_POST['hn']) || !isset($_POST['us']) || !isset($_POST['se']) || !isset($_POST['db'])) {
    $html = <<<HTML
    <h2 style="text-align: center">Informe os parâmetros de conexão e clique o botão "(Re)Criar procedures"</h2>
    <form action="recriarprocedures.php" method="post" style="text-align: center">
      <input type="text" value="127.0.0.1" name="hn" onfocus="if (this.value == 'host') this.value = ''" onblur="if (this.value == '') this.value = 'host'" style="text-align: center"><br>
      <input type="text" value="root" name="us" onfocus="if (this.value == 'usuario') this.value = ''" onblur="if (this.value == '') this.value = 'usuario'" style="text-align: center"><br>
      <input type="password" value="123456" name="se" onfocus="if (this.value == 'senha') this.value = ''" onblur="if (this.value == '') this.value = 'senha'" style="text-align: center"><br>
      <input type="text" value="mantis" name="db" onfocus="if (this.value == 'base de dados') this.value = ''" onblur="if (this.value == '') this.value = 'base de dados'" style="text-align: center"><br>
      <input type="submit" value="(Re)Criar procedures">
    </form>
HTML;
    echo($html);
  } else {
    $hostName = $_POST["hn"];
    $usuario  = $_POST["us"];
    $senha    = $_POST["se"];
    $database = $_POST["db"];
    
    if (!(($conexao = mysql_connect($hostName,$usuario,$senha)) && (mysql_select_db($database,$conexao))))
      if (!($conexao = pg_connect(sprintf("host=%s dbname=%s user=%s password=%s",$hostName,$database,$usuario,$senha)))) 
        die("A conexão com o banco de dados falhou!");
      else
        $banco = "PG";
    else
      $banco = "MY";
      
    function executarSQL($aSQL) {
      global $conexao;
      global $banco;
    
      if ($banco == "MY")
        return mysql_query($aSQL,$conexao);
      else if ($banco == "PG")
        return pg_query($conexao,$aSQL);
    }
  
  $finalquery = "";
  
  if ($banco == "PG") {
    echo("<h2>(Re)Criando procedures do Postgre SQL...</h2><br>"); 
    flush();
    
    echo("- (Re)Criando procedure \"usuarioatribuido\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION usuarioatribuido(IN aIDUSUARIO INTEGER
                                           ,IN aIDSUES    VARCHAR)
RETURNS BOOLEAN AS
\$BODY\$
BEGIN
  RETURN strpos(aIDSUES,CAST(aIDUSUARIO AS VARCHAR)) > 0;
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
    $finalquery .= "\n\n" . $query;

    executarSQL($query);
    echo("OK!<br>");
    flush();
  
  //-----------------------------------------------

    echo("- (Re)Criando procedure \"comtag\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION comtag(IN aCASO  INTEGER              
                                 ,IN aIDTAG INTEGER)
RETURNS BOOLEAN AS
\$BODY\$
DECLARE
  vRETURN BOOLEAN := FALSE;
BEGIN
  SELECT count(tag_id) = 1
    INTO vRETURN
    FROM mantis_bug_tag_table
   WHERE tag_id = aIDTAG
     AND bug_id = aCASO;

  RETURN vRETURN;
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
    $finalquery .= "\n\n" . $query;
    
    executarSQL($query);
    echo("OK!<br>");
    flush();
  
  //-----------------------------------------------
  
    echo("- (Re)Criando procedure \"paidesprint\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION paidesprint(IN aCASO             INTEGER
                                      ,IN aIDUES            INTEGER
                                      ,IN aIDPROJETOPAI     INTEGER)
RETURNS BOOLEAN AS                     
\$BODY\$
DECLARE
  vRETURN BOOLEAN := FALSE;
BEGIN
  /* 1. O CASO É PAI DE ALGUÉM */
  SELECT count(id) > 0
    INTO vRETURN
    FROM mantis_bug_relationship_table
   WHERE relationship_type = 2
     AND source_bug_id = aCASO;

  IF vRETURN THEN
    /* 2. O CASO NÃO TEM PAI */
    SELECT count(id) = 0
      INTO vRETURN
      FROM mantis_bug_relationship_table
     WHERE relationship_type = 2
       AND destination_bug_id = aCASO;
  END IF;

  IF vRETURN THEN
    /* 3. O CASO FOI RELATADO NO PROJETO PAI E ESTÁ ASSOCIADO A NOSSA UNIDADE */
    SELECT count(id) = 1
      INTO vRETURN
      FROM mantis_bug_table
     WHERE id = aCASO               
       AND handler_id = aIDUES
       AND project_id = aIDPROJETOPAI;
  END IF;

  RETURN vRETURN;
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
    $finalquery .= "\n\n" . $query;

    executarSQL($query);
    echo("OK!<br>");
    flush();
    
  //-----------------------------------------------
  
    echo("- (Re)Criando procedure \"filhodepaidesprint\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION filhodepaidesprint(IN aCASO         INTEGER
                                             ,IN aIDUES        INTEGER
                                             ,IN aIDPROJETOPAI INTEGER)
RETURNS BOOLEAN AS
\$BODY\$
DECLARE
  vRETURN BOOLEAN := FALSE;
BEGIN
  /* UM CASO É FILHO DE PAI DE SPRINT QUANDO ELE CONSTA COMO FILHO NA TABELA DE
  RELACIONAMENTOS ONDE O PAI CORRESPONDENTE É UM CASO PAI DE SPRINT */
  SELECT count(id) > 0
    INTO vRETURN
    FROM mantis_bug_relationship_table
   WHERE destination_bug_id = aCASO
     AND relationship_type = 2
     AND paidesprint(source_bug_id,aIDUES,aIDPROJETOPAI);
     
  RETURN vRETURN;
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
    $finalquery .= "\n\n" . $query;

    executarSQL($query);
    echo("OK!<br>");
    flush();
    
  //-----------------------------------------------
  
    echo("- (Re)Criando procedure \"filhode\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION filhode(IN aCASO    INTEGER
                                  ,IN aCASOPAI INTEGER)
RETURNS BOOLEAN AS
\$BODY\$
DECLARE
  vRETURN BOOLEAN := FALSE;
BEGIN

  SELECT count(source_bug_id) > 0
    INTO vRETURN
    FROM mantis_bug_relationship_table
   WHERE relationship_type = 2
     AND source_bug_id = aCASOPAI
     AND destination_bug_id = aCASO;

  RETURN vRETURN;
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
    $finalquery .= "\n\n" . $query;

    executarSQL($query);
    echo("OK!<br>");
    flush();
    
  //-----------------------------------------------
  
    echo("- (Re)Criando procedure \"orfao\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION orfao(IN aCASO INTEGER)
RETURNS BOOLEAN AS
\$BODY\$
DECLARE
  vRETURN BOOLEAN := FALSE;
BEGIN

  SELECT count(source_bug_id) = 0
    INTO vRETURN
    FROM mantis_bug_relationship_table
   WHERE relationship_type = 2
     AND destination_bug_id = aCASO;

  RETURN vRETURN;
END;
\$BODY\$
LANGUAGE PLPGSQL; 
EOS;
    $finalquery .= "\n\n" . $query;

    executarSQL($query);
    echo("OK!<br>");
    flush();
    
  //-----------------------------------------------
  
    echo("- (Re)Criando procedure \"backlog\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION backlog(IN aCASO              INTEGER
                                  ,IN aIDUSUARIO         INTEGER
                                  ,IN aIDUES             INTEGER
                                  ,IN aIDSTATUS          INTEGER
                                  ,IN aIDSTATUSAEXECUTAR INTEGER
                                  ,IN aIDPROJETOPAI      INTEGER
                                  ,IN aIDTAGTOVERIFY     INTEGER
                                  ,IN aIDTAGVERIFIED     INTEGER)
RETURNS BOOLEAN AS 
\$BODY\$
BEGIN
  /* 
  BACKLOG: 
  - É ATRIBUÍDO A UES;
  - É DE STATUS "A EXECUTAR";
  - É ÓRFÃO OU NÃO É FILHO DE "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN aIDUSUARIO = aIDUES
     AND aIDSTATUS  = aIDSTATUSAEXECUTAR
     AND (orfao(aCASO) OR NOT filhodepaidesprint(aCASO,aIDUES,aIDPROJETOPAI))
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
    $finalquery .= "\n\n" . $query;

    executarSQL($query);
    echo("OK!<br>");
    flush();

  //-----------------------------------------------
  
    echo("- (Re)Criando procedure \"todo\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION todo(IN aCASO              INTEGER
                               ,IN aIDUSUARIO         INTEGER
                               ,IN aIDSUES             VARCHAR
                               ,IN aIDSTATUS          INTEGER
                               ,IN aIDSTATUSAEXECUTAR INTEGER
                               ,IN aCASOPAIDASPRINT   INTEGER
                               ,IN aIDTAGTOVERIFY     INTEGER
                               ,IN aIDTAGVERIFIED     INTEGER)
RETURNS BOOLEAN AS 
\$BODY\$
BEGIN
  /* 
  TODO:
  - É ATRIBUÍDO A UES;
  - É DE STATUS "A EXECUTAR";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUES)
     AND aIDSTATUS  = aIDSTATUSAEXECUTAR
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
    $finalquery .= "\n\n" . $query;

    executarSQL($query);
    echo("OK!<br>");
    flush();

  //-----------------------------------------------
  
    echo("- (Re)Criando procedure \"inprogress\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION inprogress(IN aCASO                INTEGER
                                     ,IN aIDUSUARIO           INTEGER
                                     ,IN aIDSUES               VARCHAR
                                     ,IN aIDSTATUS            INTEGER
                                     ,IN aIDSTATUSAEMEXECUCAO INTEGER
                                     ,IN aCASOPAIDASPRINT     INTEGER
                                     ,IN aIDTAGTOVERIFY       INTEGER
                                     ,IN aIDTAGVERIFIED       INTEGER)
RETURNS BOOLEAN AS 
\$BODY\$
BEGIN
  /* 
  INPROGRESS:
  - É ATRIBUÍDO A UES;
  - É DE STATUS "EM EXECUÇÃO";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUES)
     AND aIDSTATUS  = aIDSTATUSAEMEXECUCAO
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
    $finalquery .= "\n\n" . $query;
    
    executarSQL($query);
    echo("OK!<br>");
    flush();

  //-----------------------------------------------
  
    echo("- (Re)Criando procedure \"toverify\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION toverify(IN aCASO                INTEGER
                                   ,IN aIDUSUARIO           INTEGER
                                   ,IN aIDSUES               VARCHAR
                                   ,IN aIDSTATUS            INTEGER
                                   ,IN aIDSTATUSAEMEXECUCAO INTEGER
                                   ,IN aCASOPAIDASPRINT     INTEGER
                                   ,IN aIDTAGTOVERIFY       INTEGER
                                   ,IN aIDTAGVERIFIED       INTEGER)
RETURNS BOOLEAN AS 
\$BODY\$
BEGIN
  /* 
  TO VERIFY:
  - É ATRIBUÍDO A UES;
  - É DE STATUS "EM EXECUÇÃO";
  - É FILHO DO NOSSO "CASO PAI";
  - TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUES)
     AND aIDSTATUS  = aIDSTATUSAEMEXECUCAO
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
    $finalquery .= "\n\n" . $query;
    
    executarSQL($query);
    echo("OK!<br>");
    flush();
    
  //-----------------------------------------------
  
    echo("- (Re)Criando procedure \"verified\"...");
    flush();
    $query = <<<EOS
CREATE OR REPLACE FUNCTION verified(IN aCASO                INTEGER
                                   ,IN aIDUSUARIO           INTEGER
                                   ,IN aIDSUES               VARCHAR
                                   ,IN aIDSTATUS            INTEGER
                                   ,IN aIDSTATUSAEMEXECUCAO INTEGER
                                   ,IN aCASOPAIDASPRINT     INTEGER
                                   ,IN aIDTAGTOVERIFY       INTEGER
                                   ,IN aIDTAGVERIFIED       INTEGER)
RETURNS BOOLEAN AS 
\$BODY\$
BEGIN
  /* 
  VERIFIED:
  - É ATRIBUÍDO A UES;
  - É DE STATUS "EM EXECUÇÃO";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUES)
     AND aIDSTATUS  = aIDSTATUSAEMEXECUCAO
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND comtag(aCASO,aIDTAGVERIFIED);
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL($query);
      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"ugc1\"...");
      flush();
      $query = <<<EOS
CREATE OR REPLACE FUNCTION ugc1(IN aCASO               INTEGER
                               ,IN aIDUSUARIO          INTEGER
                               ,IN aIDSUGC             VARCHAR
                               ,IN aIDSTATUS           INTEGER
                               ,IN aIDSTATUSEMEXECUCAO INTEGER
                               ,IN aCASOPAIDASPRINT    INTEGER
                               ,IN aIDTAGTOVERIFY      INTEGER
                               ,IN aIDTAGVERIFIED      INTEGER)
RETURNS BOOLEAN AS 
\$BODY\$
BEGIN
  /* 
  UGC1:
  - É ATRIBUÍDO A UGC;
  - É DE STATUS "EM EXECUÇÃO";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUGC)
     AND aIDSTATUS  = aIDSTATUSEMEXECUCAO
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL($query);
      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"uts\"...");
      flush();
      $query = <<<EOS
CREATE OR REPLACE FUNCTION uts(IN aCASO               INTEGER
                              ,IN aIDUSUARIO          INTEGER
                              ,IN aIDSUTS             VARCHAR
                              ,IN aIDSTATUS           INTEGER
                              ,IN aIDSTATUSEMTESTES   INTEGER
                              ,IN aIDSTATUSEMEXECUCAO INTEGER
                              ,IN aCASOPAIDASPRINT    INTEGER
                              ,IN aIDTAGTOVERIFY      INTEGER
                              ,IN aIDTAGVERIFIED      INTEGER)
RETURNS BOOLEAN AS 
\$BODY\$
BEGIN
  /* 
  UTS:
  - É ATRIBUÍDO A UTS;
  - É DE STATUS "EM EXECUÇÃO" OU "EM TESTES";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUTS)
     AND aIDSTATUS IN (aIDSTATUSEMTESTES,aIDSTATUSEMEXECUCAO)
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL($query);
      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"ugc2\"...");
      flush();
      $query = <<<EOS
CREATE OR REPLACE FUNCTION ugc2(IN aCASO             INTEGER
                               ,IN aIDUSUARIO        INTEGER
                               ,IN aIDSUGC           VARCHAR
                               ,IN aIDSTATUS         INTEGER
                               ,IN aIDSTATUSEMTESTES INTEGER
                               ,IN aCASOPAIDASPRINT  INTEGER
                               ,IN aIDTAGTOVERIFY    INTEGER
                               ,IN aIDTAGVERIFIED    INTEGER)
RETURNS BOOLEAN AS 
\$BODY\$
BEGIN
  /* 
  UGC2:
  - É ATRIBUÍDO A UGC;
  - É DE STATUS "EM TESTES";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUGC)
     AND aIDSTATUS  = aIDSTATUSEMTESTES
     AND filhode(aCASO,aCASOPAIDASPRINT)
     and NOT comtag(aCASO,aIDTAGTOVERIFY)
     and NOT comtag(aCASO,aIDTAGVERIFIED);
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL($query);
      echo("OK!<br>");
      flush();

  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"un\"...");
      flush();
      $query = <<<EOS
CREATE OR REPLACE FUNCTION un(IN aCASO             INTEGER
                             ,IN aIDUSUARIO        INTEGER
                             ,IN aIDSUN            VARCHAR
                             ,IN aIDSTATUS         INTEGER
                             ,IN aIDSTATUSLIBHOMOL INTEGER
                             ,IN aIDSTATUSEMHOMOL  INTEGER
                             ,IN aIDSTATUSHOMOL    INTEGER
                             ,IN aCASOPAIDASPRINT  INTEGER
                             ,IN aIDTAGTOVERIFY    INTEGER
                             ,IN aIDTAGVERIFIED    INTEGER)
RETURNS BOOLEAN AS 
\$BODY\$
BEGIN
  /* 
  UN:
  - É ATRIBUÍDO A UNIDADE DE NEGÓCIO
  - É DE STATUS "LIBERADO P/ HOMOLOGAÇÃO" OU "EM HOMOLOGAÇÃO" OU "HOMOLOGADO";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUN)
     AND aIDSTATUS IN (aIDSTATUSLIBHOMOL,aIDSTATUSEMHOMOL,aIDSTATUSHOMOL)
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL($query);
      echo("OK!<br>");
      flush();

  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"ugc3\"...");
      flush();
      $query = <<<EOS
CREATE OR REPLACE FUNCTION ugc3(IN aCASO               INTEGER
                               ,IN aIDUSUARIO          INTEGER
                               ,IN aIDSUGC             VARCHAR
                               ,IN aIDSTATUS           INTEGER
                               ,IN aIDSTATUSHOMOLOGADO INTEGER
                               ,IN aCASOPAIDASPRINT    INTEGER
                               ,IN aIDTAGTOVERIFY      INTEGER
                               ,IN aIDTAGVERIFIED      INTEGER)
RETURNS BOOLEAN AS 
\$BODY\$
BEGIN
  /* 
  UGC3:
  - É ATRIBUÍDO A UGC;
  - É DE STATUS "HOMOLOGADO";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUGC)
     AND aIDSTATUS  = aIDSTATUSHOMOLOGADO
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
END;
\$BODY\$
LANGUAGE PLPGSQL;
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL($query);
      echo("OK!<br>");
      flush();
  ##############################################################################################
  ##############################################################################################
  ##############################################################################################
  ##############################################################################################
  ##############################################################################################
    } else if ($banco == "MY") {
      echo("<h2>(Re)Criando procedures do MySQL...</h2><br>");
      flush();
      
      echo("- (Re)Criando procedure \"usuarioatribuido\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION usuarioatribuido(aIDUSUARIO INTEGER
                                ,aIDSUES    VARCHAR(255))
RETURNS BOOLEAN
BEGIN
  RETURN instr(aIDSUES,CAST(aIDUSUARIO AS CHAR)) > 0;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL($query);
      echo("OK!<br>");
      flush();
  
  //-----------------------------------------------

      echo("- (Re)Criando procedure \"comtag\"...");
      flush();
      
      $query = <<<EOS
CREATE FUNCTION comtag(aCASO  INTEGER              
                      ,aIDTAG INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  SELECT count(tag_id) = 1
    INTO vRETURN
    FROM mantis_bug_tag_table
   WHERE tag_id = aIDTAG
     AND bug_id = aCASO;

  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS comtag");
      executarSQL($query);
      
      echo("OK!<br>");
      flush();
  
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"paidesprint\"...");
      flush();

      $query = <<<EOS
CREATE FUNCTION paidesprint(aCASO             INTEGER
                           ,aIDUES            INTEGER
                           ,aIDPROJETOPAI     INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  /* 1. O CASO ? PAI DE ALGU?M */
  SELECT count(id) > 0
    INTO vRETURN
    FROM mantis_bug_relationship_table
   WHERE relationship_type = 2
     AND source_bug_id = aCASO;

  IF vRETURN THEN
    /* 2. O CASO N?O TEM PAI */
    SELECT count(id) = 0
      INTO vRETURN
      FROM mantis_bug_relationship_table
     WHERE relationship_type = 2
       AND destination_bug_id = aCASO;
  END IF;

  IF vRETURN THEN
    /* 3. O CASO FOI RELATADO NO PROJETO PAI E EST? ASSOCIADO A NOSSA UNIDADE */
    SELECT count(id) = 1
      INTO vRETURN
      FROM mantis_bug_table
     WHERE id = aCASO
       AND handler_id = aIDUES
       AND project_id = aIDPROJETOPAI;
  END IF;
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS paidesprint");
      executarSQL($query);

      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"filhodepaidesprint\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION filhodepaidesprint(aCASO         INTEGER
                                  ,aIDUES        INTEGER
                                  ,aIDPROJETOPAI INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  /* UM CASO É FILHO DE PAI DE SPRINT QUANDO ELE CONSTA COMO FILHO NA TABELA DE
  RELACIONAMENTOS ONDE O PAI CORRESPONDENTE É UM CASO PAI DE SPRINT */
  SELECT count(id) > 0
    INTO vRETURN
    FROM mantis_bug_relationship_table
   WHERE destination_bug_id = aCASO
     AND relationship_type = 2
     AND paidesprint(source_bug_id,aIDUES,aIDPROJETOPAI);

  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS filhodepaidesprint");
      executarSQL($query);

      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"filhode\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION filhode(aCASO    INTEGER
                       ,aCASOPAI INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  SELECT count(source_bug_id) > 0
    INTO vRETURN
    FROM mantis_bug_relationship_table
   WHERE relationship_type = 2
     AND source_bug_id = aCASOPAI
     AND destination_bug_id = aCASO;
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS filhode");
      executarSQL($query);
      
      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"orfao\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION orfao(aCASO INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  SELECT count(source_bug_id) = 0
    INTO vRETURN
    FROM mantis_bug_relationship_table
   WHERE relationship_type = 2
     AND destination_bug_id = aCASO;
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS orfao");
      executarSQL($query);

      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"backlog\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION backlog(aCASO              INTEGER
                       ,aIDUSUARIO         INTEGER
                       ,aIDUES             INTEGER
                       ,aIDSTATUS          INTEGER
                       ,aIDSTATUSAEXECUTAR INTEGER
                       ,aIDPROJETOPAI      INTEGER
                       ,aIDTAGTOVERIFY     INTEGER
                       ,aIDTAGVERIFIED     INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  /* 
  BACKLOG: 
  - É ATRIBUÍDO A UES;
  - É DE STATUS "A EXECUTAR";
  - É ÓRFÃO OU NÃO É FILHO DE "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN aIDUSUARIO = aIDUES
     AND aIDSTATUS  = aIDSTATUSAEXECUTAR
     AND (orfao(aCASO) or NOT filhodepaidesprint(aCASO,aIDUES,aIDPROJETOPAI))
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS backlog");
      executarSQL($query);

      echo("OK!<br>");
      flush();

  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"todo\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION todo(aCASO              INTEGER
                    ,aIDUSUARIO         INTEGER
                    ,aIDSUES             VARCHAR(128)
                    ,aIDSTATUS          INTEGER
                    ,aIDSTATUSAEXECUTAR INTEGER
                    ,aCASOPAIDASPRINT   INTEGER
                    ,aIDTAGTOVERIFY     INTEGER
                    ,aIDTAGVERIFIED     INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  /* 
  TODO:
  - É ATRIBUÍDO A UES;
  - É DE STATUS "A EXECUTAR";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUES)
     AND aIDSTATUS  = aIDSTATUSAEXECUTAR
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS todo");
      executarSQL($query);

      echo("OK!<br>");
      flush();

  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"inprogress\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION inprogress(aCASO                INTEGER
                          ,aIDUSUARIO           INTEGER
                          ,aIDSUES               VARCHAR(128)
                          ,aIDSTATUS            INTEGER
                          ,aIDSTATUSAEMEXECUCAO INTEGER
                          ,aCASOPAIDASPRINT     INTEGER
                          ,aIDTAGTOVERIFY       INTEGER
                          ,aIDTAGVERIFIED       INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  /* 
  INPROGRESS:
  - É ATRIBUÍDO A UES;
  - É DE STATUS "EM EXECUÇÃO";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUES)
     AND aIDSTATUS  = aIDSTATUSAEMEXECUCAO
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS inprogress");
      executarSQL($query);

      echo("OK!<br>");
      flush();

  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"toverify\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION toverify(aCASO                INTEGER
                        ,aIDUSUARIO           INTEGER
                        ,aIDSUES               VARCHAR(128)
                        ,aIDSTATUS            INTEGER
                        ,aIDSTATUSAEMEXECUCAO INTEGER
                        ,aCASOPAIDASPRINT     INTEGER
                        ,aIDTAGTOVERIFY       INTEGER
                        ,aIDTAGVERIFIED       INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  /* 
  TO VERIFY:
  - É ATRIBUÍDO A UES;
  - É DE STATUS "EM EXECUÇÃO";
  - É FILHO DO NOSSO "CASO PAI";
  - TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUES)
     AND aIDSTATUS  = aIDSTATUSAEMEXECUCAO
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS toverify");
      executarSQL($query);
      
      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"verified\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION verified(aCASO                INTEGER
                        ,aIDUSUARIO           INTEGER
                        ,aIDSUES              VARCHAR(128)
                        ,aIDSTATUS            INTEGER
                        ,aIDSTATUSAEMEXECUCAO INTEGER
                        ,aCASOPAIDASPRINT     INTEGER
                        ,aIDTAGTOVERIFY       INTEGER
                        ,aIDTAGVERIFIED       INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  /* 
  VERIFIED:
  - É ATRIBUÍDO A UES;
  - É DE STATUS "EM EXECUÇÃO";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUES)
     AND aIDSTATUS  = aIDSTATUSAEMEXECUCAO
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND comtag(aCASO,aIDTAGVERIFIED);
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS verified");
      executarSQL($query);

      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"ugc1\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION ugc1(aCASO               INTEGER
                    ,aIDUSUARIO          INTEGER
                    ,aIDSUGC             VARCHAR(128)
                    ,aIDSTATUS           INTEGER
                    ,aIDSTATUSEMEXECUCAO INTEGER
                    ,aCASOPAIDASPRINT    INTEGER
                    ,aIDTAGTOVERIFY      INTEGER
                    ,aIDTAGVERIFIED      INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;

  /* 
  UGC1:
  - É ATRIBUÍDO A UGC;
  - É DE STATUS "EM EXECUÇÃO";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUGC)
     AND aIDSTATUS  = aIDSTATUSEMEXECUCAO
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS ugc1");
      executarSQL($query);

      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"uts\"...");
      flush();
      
      $query = <<<EOS
CREATE FUNCTION uts(aCASO               INTEGER
                   ,aIDUSUARIO          INTEGER
                   ,aIDSUTS             VARCHAR(128)
                   ,aIDSTATUS           INTEGER
                   ,aIDSTATUSEMTESTES   INTEGER
                   ,aIDSTATUSEMEXECUCAO INTEGER
                   ,aCASOPAIDASPRINT    INTEGER
                   ,aIDTAGTOVERIFY      INTEGER
                   ,aIDTAGVERIFIED      INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  /* 
  UTS:
  - É ATRIBUÍDO A UTS;
  - É DE STATUS "EM EXECUÇÃO" OU "EM TESTES";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUTS)
     AND aIDSTATUS IN (aIDSTATUSEMTESTES,aIDSTATUSEMEXECUCAO)
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS uts");
      executarSQL($query);

      echo("OK!<br>");
      flush();
    
  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"ugc2\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION ugc2(aCASO             INTEGER
                    ,aIDUSUARIO        INTEGER
                    ,aIDSUGC           VARCHAR(128)
                    ,aIDSTATUS         INTEGER
                    ,aIDSTATUSEMTESTES INTEGER
                    ,aCASOPAIDASPRINT  INTEGER
                    ,aIDTAGTOVERIFY    INTEGER
                    ,aIDTAGVERIFIED    INTEGER)

RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;

  /* 
  UGC2:
  - É ATRIBUÍDO A UGC;
  - É DE STATUS "EM TESTES";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUGC)
     AND aIDSTATUS  = aIDSTATUSEMTESTES
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS ugc2");
      executarSQL($query);

      echo("OK!<br>");
      flush();

  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"un\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION un(aCASO             INTEGER
                  ,aIDUSUARIO        INTEGER
                  ,aIDSUN            VARCHAR(255)
                  ,aIDSTATUS         INTEGER
                  ,aIDSTATUSLIBHOMOL INTEGER
                  ,aIDSTATUSEMHOMOL  INTEGER
                  ,aIDSTATUSHOMOL    INTEGER
                  ,aCASOPAIDASPRINT  INTEGER
                  ,aIDTAGTOVERIFY    INTEGER
                  ,aIDTAGVERIFIED    INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  /* 
  UN:
  - É ATRIBUÍDO A UNIDADE DE NEGÓCIO
  - É DE STATUS "LIBERADO P/ HOMOLOGAÇÃO" OU "EM HOMOLOGAÇÃO" OU "HOMOLOGADO";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUN)
     AND aIDSTATUS IN (aIDSTATUSLIBHOMOL,aIDSTATUSEMHOMOL,aIDSTATUSHOMOL)
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS un");
      executarSQL($query);

      echo("OK!<br>");
      flush();

  //-----------------------------------------------
  
      echo("- (Re)Criando procedure \"ugc3\"...");
      flush();
      $query = <<<EOS
CREATE FUNCTION ugc3(aCASO               INTEGER
                    ,aIDUSUARIO          INTEGER
                    ,aIDSUGC             VARCHAR(128)
                    ,aIDSTATUS           INTEGER
                    ,aIDSTATUSHOMOLOGADO INTEGER
                    ,aCASOPAIDASPRINT    INTEGER
                    ,aIDTAGTOVERIFY      INTEGER
                    ,aIDTAGVERIFIED      INTEGER)
RETURNS BOOLEAN
BEGIN
  DECLARE vRETURN BOOLEAN DEFAULT FALSE;
  
  /* 
  UGC3:
  - É ATRIBUÍDO A UGC;
  - É DE STATUS "HOMOLOGADO";
  - É FILHO DO NOSSO "CASO PAI";
  - NÃO TEM O TAG "TO VERIFY"
  - NÃO TEM O TAG "VERIFIED" 
  */
  RETURN usuarioatribuido(aIDUSUARIO,aIDSUGC)
     AND aIDSTATUS  = aIDSTATUSHOMOLOGADO
     AND filhode(aCASO,aCASOPAIDASPRINT)
     AND NOT comtag(aCASO,aIDTAGTOVERIFY)
     AND NOT comtag(aCASO,aIDTAGVERIFIED);
  
  RETURN vRETURN;
END
EOS;
      $finalquery .= "\n\n" . $query;
      
      executarSQL("DROP FUNCTION IF EXISTS ugc3");
      executarSQL($query);
      
      echo("OK!<br>");
      flush();

    }
    //echo("\n------------------\n");
    //echo($finalquery);
  }
?>

  </body>
</html>